creative commons

library(jsonlite)
library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
-- Attaching packages -------------------------------------------------------------------------------------------- tidyverse 1.3.1 --
v ggplot2 3.3.5     v purrr   0.3.4
v tibble  3.1.6     v dplyr   1.0.7
v tidyr   1.1.4     v stringr 1.4.0
v readr   2.1.0     v forcats 0.5.1
-- Conflicts ----------------------------------------------------------------------------------------------- tidyverse_conflicts() --
x dplyr::filter()  masks stats::filter()
x purrr::flatten() masks jsonlite::flatten()
x dplyr::lag()     masks stats::lag()
library(tidyjson)

Attaching package: ‘tidyjson’

The following object is masked from ‘package:jsonlite’:

    read_json

The following object is masked from ‘package:stats’:

    filter
#Datos de declaraciones
declaraciones <- fromJSON("data/declaraciones.json", flatten = TRUE) 
#Datos de personas servidoras públicas sancionadas por actos de corrupción
servidores <- fromJSON("data/Sistema3Servidores.json",flatten = TRUE)
#Datos de personas servidoras públicas que intervienen en contrataciones públicas
sistemas2 <- fromJSON("data/SistemaS2.json", flatten = TRUE )

tenemos codigo postal

guardamos la muestra

save(declaraciones_muestra, file="declaraciones_muestra.Rda")
load("declaraciones_muestra.RData")
declaraciones_muestra$metadata
#Educacion
#años de haber finalizado sus estudios
declaraciones_muestra$declaracion$situacionPatrimonial$datosCurricularesDeclarante$escolaridad[[1]]$fechaObtencion
declaraciones_muestra$declaracion$situacionPatrimonial$datosGenerales$situacionPersonalEstadoCivil
#Ubicacion
declaraciones_muestra$declaracion$situacionPatrimonial$domicilioDeclarante$domicilioMexico
#cargo y contrato, fechaTomaPosesion, ubicacion trabajo
declaraciones_muestra$declaracion$situacionPatrimonial$datosEmpleoCargoComision
# podemos saber si tiene experiencia laboral, y tiempo de trabajar,
# tiempo en el sector publico
declaraciones_muestra$declaracion$situacionPatrimonial$experienciaLaboral$experiencia[[2]]
# informacion de la pareja, y dependientes economicos
declaraciones_muestra$declaracion$situacionPatrimonial$datosPareja
declaraciones_muestra$declaracion$situacionPatrimonial$datosDependienteEconomico
#ingresos
declaraciones_muestra$declaracion$situacionPatrimonial$ingresos
#inmuebles precio y contrastar si vale lo declarado 
declaraciones_muestra$declaracion$situacionPatrimonial$bienesInmuebles$

numero de declaraciones por rfc

declaraciones$declaracion$situacionPatrimonial$datosGenerales$rfc %>% 
  count(rfc, sort = T)
declaraciones_muestra
declaraciones_muestra %>% unnest() %>% unnest()%>% unnest()
Warning: `cols` is now required when using unnest().
Please use `cols = c(`_id`, metadata, declaracion, interes)`
Warning: `cols` is now required when using unnest().
Please use `cols = c(situacionPatrimonial, interes, participacion)`
Warning: `cols` is now required when using unnest().
Please use `cols = c(datosGenerales, domicilioDeclarante, datosCurricularesDeclarante, 
    datosEmpleoCargoComision, experienciaLaboral, datosPareja, 
    datosDependienteEconomico, ingresos, bienesInmuebles, vehiculos, 
    bienesMuebles, inversiones, adeudos, prestamoOComodato, actividadAnualAnterior, 
    participacion, participacionTomaDecisiones, apoyos, representacion, 
    clientesPrincipales, beneficiosPrivados, fideicomisos, participacion1)`

servidores sancionados

# lugar donde laborab
servidores$servidorPublicoSancionado.rfc = do.call(rbind.data.frame, servidores$servidorPublicoSancionado.rfc)
servidores <- servidores %>% 
  unnest(servidorPublicoSancionado.rfc)
servidores
# lugar donde laborab
servidores[1,] %>% 
  str()
tibble [1 x 27] (S3: tbl_df/tbl/data.frame)
 $ id                                       : chr "a94cacc9-53ba-40d1-bc04-08b765010ac0"
 $ fechaCaptura                             : chr "2010-01-01"
 $ expediente                               : chr "SANC/bed70faf"
 $ autoridadSancionadora                    : chr "Contraloría Interna"
 $ tipoSancion                              :List of 1
  ..$ :'data.frame':    1 obs. of  3 variables:
  .. ..$ clave      : chr "SE"
  .. ..$ valor      : chr "SANCIÓN ECONÓMICA"
  .. ..$ descripcion: chr ""
 $ causaMotivoHechos                        : chr "DESVÍO DE RECURSOS PÚBLICOS"
 $ observaciones                            : chr "Al contrario del pensamiento popular, el texto de Lorem Ipsum no es simplemente texto aleatorio. Tiene sus raic"| __truncated__
 $ institucionDependencia.nombre            : chr "Comisión Federal de Electricidad"
 $ rfc                                      : chr "PUDD930927"
 $ homoClave                                : chr "E33"
 $ servidorPublicoSancionado.curp           : chr "PUDD930927MVZG N02"
 $ servidorPublicoSancionado.nombres        : chr "Daniela"
 $ servidorPublicoSancionado.primerApellido : chr "Puga"
 $ servidorPublicoSancionado.segundoApellido: chr "de Anda"
 $ servidorPublicoSancionado.puesto         : chr "Jefe de departamento"
 $ servidorPublicoSancionado.genero.clave   : chr "M"
 $ servidorPublicoSancionado.genero.valor   : chr "FEMENINO"
 $ tipoFalta.clave                          : chr "ASEX"
 $ tipoFalta.valor                          : chr "COMETER O TOLERAR CONDUCTAS DE ACOSO SEXUAL"
 $ tipoFalta.descripcion                    : chr "COMETER O TOLERAR CONDUCTAS DE ACOSO SEXUAL"
 $ resolucion.fechaResolucion               : chr "2010-01-01"
 $ multa.monto                              : num 13185
 $ multa.moneda.clave                       : chr "MXN"
 $ multa.moneda.valor                       : chr "Peso Mexicano"
 $ inhabilitacion.plazo                     : chr NA
 $ inhabilitacion.fechaInicial              : chr NA
 $ inhabilitacion.fechaFinal                : chr NA

servidores_sanciones <- servidores %>% 
  mutate(tipoSancion = map_chr(tipoSancion, ~ .[['valor']]) )

Caso especial

sistemas2[1,] %>% 
  str()
'data.frame':   1 obs. of  17 variables:
 $ id                    : chr "8a54a1ce-98b4-40f9-a52c-a272ed56f238"
 $ fechaCaptura          : chr "2018-05-21T17:32:28Z"
 $ ejercicioFiscal       : chr "2018"
 $ ramo                  :'data.frame': 1 obs. of  2 variables:
  ..$ clave: int 23
  ..$ valor: chr "Provisiones salariales y económicas"
 $ rfc                   : chr "ROCA9005303Z8"
 $ curp                  : chr "ROCA900530MYNDLL04"
 $ nombres               : chr "Alejandra"
 $ primerApellido        : chr "Rodríguez"
 $ segundoApellido       : chr "Calderón"
 $ genero                :'data.frame': 1 obs. of  2 variables:
  ..$ clave: chr "F"
  ..$ valor: chr "FEMENINO"
 $ institucionDependencia:'data.frame': 1 obs. of  3 variables:
  ..$ nombre: chr "SECRETARÍA DE ENERGÍA"
  ..$ siglas: chr "SENER"
  ..$ clave : chr "XYZ987"
 $ puesto                :List of 1
  ..$ :List of 2
  .. ..$ nombre: chr "DIRECTOR DE ADMINISTRACIÓN DE BIENES INFORMÁTICOS"
  .. ..$ nivel : chr "M11"
 $ tipoArea              :List of 1
  ..$ :'data.frame':    2 obs. of  2 variables:
  .. ..$ clave: chr  "T" "RE"
  .. ..$ valor: chr  "TÉCNICA" "RESPONSABLE DE LA EJECUCIÓN"
 $ nivelResponsabilidad  :List of 1
  ..$ :'data.frame':    1 obs. of  2 variables:
  .. ..$ clave: chr "R"
  .. ..$ valor: chr "RESOLUCIÓN"
 $ tipoProcedimiento     :List of 1
  ..$ :'data.frame':    1 obs. of  2 variables:
  .. ..$ clave: int 1
  .. ..$ valor: chr ""
 $ superiorInmediato     :'data.frame': 1 obs. of  7 variables:
  ..$ nombres        : chr "PEDRO"
  ..$ primerApellido : chr "CRUZ"
  ..$ segundoApellido: chr "MEDINA"
  ..$ curp           : chr "CUMP770826HMNRDD96"
  ..$ rfc            : chr "CUMP7708269R6"
  ..$ puesto         :'data.frame': 1 obs. of  2 variables:
  .. ..$ nombre: chr "Director General"
  .. ..$ nivel : chr "CFM2300003"
  ..$ genero         :'data.frame': 1 obs. of  2 variables:
  .. ..$ clave: chr NA
  .. ..$ valor: chr NA
 $ observaciones         : chr ""
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCmVkaXRvcl9vcHRpb25zOiANCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQ0KLS0tDQoNCmNyZWF0aXZlIGNvbW1vbnMNCg0KYGBge3J9DQpsaWJyYXJ5KGpzb25saXRlKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHRpZHlqc29uKQ0KYGBgDQoNCg0KYGBge3J9DQojRGF0b3MgZGUgZGVjbGFyYWNpb25lcw0KZGVjbGFyYWNpb25lcyA8LSBmcm9tSlNPTigiZGF0YS9kZWNsYXJhY2lvbmVzLmpzb24iLCBmbGF0dGVuID0gVFJVRSkgDQojRGF0b3MgZGUgcGVyc29uYXMgc2Vydmlkb3JhcyBww7pibGljYXMgc2FuY2lvbmFkYXMgcG9yIGFjdG9zIGRlIGNvcnJ1cGNpw7NuDQpzZXJ2aWRvcmVzIDwtIGZyb21KU09OKCJkYXRhL1Npc3RlbWEzU2Vydmlkb3Jlcy5qc29uIixmbGF0dGVuID0gVFJVRSkNCiNEYXRvcyBkZSBwZXJzb25hcyBzZXJ2aWRvcmFzIHDDumJsaWNhcyBxdWUgaW50ZXJ2aWVuZW4gZW4gY29udHJhdGFjaW9uZXMgcMO6YmxpY2FzDQpzaXN0ZW1hczIgPC0gZnJvbUpTT04oImRhdGEvU2lzdGVtYVMyLmpzb24iLCBmbGF0dGVuID0gVFJVRSApDQpgYGANCg0KYGBge3J9DQpkZWNsYXJhY2lvbmVzDQpgYGANCg0KDQoNCiMgdGVuZW1vcyBjb2RpZ28gcG9zdGFsDQoNCmBgYHtyfQ0KZGVjbGFyYWNpb25lc19tdWVzdHJhIDwtIGRlY2xhcmFjaW9uZXMgJT4lIA0KICBoZWFkKCkgJT4lIA0KICBhc190aWJibGUoKQ0KDQpkZWNsYXJhY2lvbmVzX211ZXN0cmEgJT4lIA0KICB1bm5lc3QoZGVjbGFyYWNpb24uc2l0dWFjaW9uUGF0cmltb25pYWwuZGF0b3NDdXJyaWN1bGFyZXNEZWNsYXJhbnRlLmVzY29sYXJpZGFkKQ0KYGBgDQoNCiMgZ3VhcmRhbW9zIGxhIG11ZXN0cmENCg0KYGBge3J9DQpzYXZlKGRlY2xhcmFjaW9uZXNfbXVlc3RyYSwgZmlsZT0iZGVjbGFyYWNpb25lc19tdWVzdHJhLlJkYSIpDQpgYGANCg0KYGBge3J9DQpsb2FkKCJkZWNsYXJhY2lvbmVzX211ZXN0cmEuUkRhdGEiKQ0KDQpgYGANCg0KDQpgYGB7cn0NCmRlY2xhcmFjaW9uZXNfbXVlc3RyYSRtZXRhZGF0YQ0KYGBgDQoNCmBgYHtyfQ0KI0VkdWNhY2lvbg0KI2HDsW9zIGRlIGhhYmVyIGZpbmFsaXphZG8gc3VzIGVzdHVkaW9zDQpkZWNsYXJhY2lvbmVzX211ZXN0cmEkZGVjbGFyYWNpb24kc2l0dWFjaW9uUGF0cmltb25pYWwkZGF0b3NDdXJyaWN1bGFyZXNEZWNsYXJhbnRlJGVzY29sYXJpZGFkW1sxXV0kZmVjaGFPYnRlbmNpb24NCmBgYA0KDQpgYGB7cn0NCmRlY2xhcmFjaW9uZXNfbXVlc3RyYSRkZWNsYXJhY2lvbiRzaXR1YWNpb25QYXRyaW1vbmlhbCRkYXRvc0dlbmVyYWxlcyRzaXR1YWNpb25QZXJzb25hbEVzdGFkb0NpdmlsDQpgYGANCg0KDQpgYGB7cn0NCiNVYmljYWNpb24NCmRlY2xhcmFjaW9uZXNfbXVlc3RyYSRkZWNsYXJhY2lvbiRzaXR1YWNpb25QYXRyaW1vbmlhbCRkb21pY2lsaW9EZWNsYXJhbnRlJGRvbWljaWxpb01leGljbw0KDQpgYGANCg0KDQpgYGB7cn0NCiNjYXJnbyB5IGNvbnRyYXRvLCBmZWNoYVRvbWFQb3Nlc2lvbiwgdWJpY2FjaW9uIHRyYWJham8NCmRlY2xhcmFjaW9uZXNfbXVlc3RyYSRkZWNsYXJhY2lvbiRzaXR1YWNpb25QYXRyaW1vbmlhbCRkYXRvc0VtcGxlb0NhcmdvQ29taXNpb24NCmBgYA0KYGBge3J9DQojIHBvZGVtb3Mgc2FiZXIgc2kgdGllbmUgZXhwZXJpZW5jaWEgbGFib3JhbCwgeSB0aWVtcG8gZGUgdHJhYmFqYXIsDQojIHRpZW1wbyBlbiBlbCBzZWN0b3IgcHVibGljbw0KZGVjbGFyYWNpb25lc19tdWVzdHJhJGRlY2xhcmFjaW9uJHNpdHVhY2lvblBhdHJpbW9uaWFsJGV4cGVyaWVuY2lhTGFib3JhbCRleHBlcmllbmNpYVtbMl1dDQpgYGANCg0KDQpgYGB7cn0NCiMgaW5mb3JtYWNpb24gZGUgbGEgcGFyZWphLCB5IGRlcGVuZGllbnRlcyBlY29ub21pY29zDQpkZWNsYXJhY2lvbmVzX211ZXN0cmEkZGVjbGFyYWNpb24kc2l0dWFjaW9uUGF0cmltb25pYWwkZGF0b3NQYXJlamENCmRlY2xhcmFjaW9uZXNfbXVlc3RyYSRkZWNsYXJhY2lvbiRzaXR1YWNpb25QYXRyaW1vbmlhbCRkYXRvc0RlcGVuZGllbnRlRWNvbm9taWNvDQpgYGANCg0KDQpgYGB7cn0NCiNpbmdyZXNvcw0KZGVjbGFyYWNpb25lc19tdWVzdHJhJGRlY2xhcmFjaW9uJHNpdHVhY2lvblBhdHJpbW9uaWFsJGluZ3Jlc29zDQpgYGANCg0KYGBge3J9DQojaW5tdWVibGVzIHByZWNpbyB5IGNvbnRyYXN0YXIgc2kgdmFsZSBsbyBkZWNsYXJhZG8gDQpkZWNsYXJhY2lvbmVzX211ZXN0cmEkZGVjbGFyYWNpb24kc2l0dWFjaW9uUGF0cmltb25pYWwkYmllbmVzSW5tdWVibGVzJA0KYGBgDQoNCiMgbnVtZXJvIGRlIGRlY2xhcmFjaW9uZXMgcG9yIHJmYw0KDQpgYGB7cn0NCmRlY2xhcmFjaW9uZXMkZGVjbGFyYWNpb24kc2l0dWFjaW9uUGF0cmltb25pYWwkZGF0b3NHZW5lcmFsZXMkcmZjICU+JSANCiAgY291bnQocmZjLCBzb3J0ID0gVCkNCmBgYA0KDQpgYGB7cn0NCmRlY2xhcmFjaW9uZXNfbXVlc3RyYQ0KYGBgDQoNCg0KYGBge3J9DQpkZWNsYXJhY2lvbmVzX211ZXN0cmEgJT4lIHVubmVzdCgpICU+JSB1bm5lc3QoKSU+JSB1bm5lc3QoKQ0KYGBgDQoNCiMgc2Vydmlkb3JlcyBzYW5jaW9uYWRvcw0KDQpgYGB7cn0NCiMgbHVnYXIgZG9uZGUgbGFib3JhYg0Kc2Vydmlkb3JlcyRzZXJ2aWRvclB1YmxpY29TYW5jaW9uYWRvLnJmYyA9IGRvLmNhbGwocmJpbmQuZGF0YS5mcmFtZSwgc2Vydmlkb3JlcyRzZXJ2aWRvclB1YmxpY29TYW5jaW9uYWRvLnJmYykNCnNlcnZpZG9yZXMgPC0gc2Vydmlkb3JlcyAlPiUgDQogIHVubmVzdChzZXJ2aWRvclB1YmxpY29TYW5jaW9uYWRvLnJmYykNCnNlcnZpZG9yZXMNCmBgYA0KDQpgYGB7cn0NCiMgbHVnYXIgZG9uZGUgbGFib3JhYg0Kc2Vydmlkb3Jlc1sxLF0gJT4lIA0KICBzdHIoKQ0KYGBgDQoNCmBgYHtyfQ0KDQpzZXJ2aWRvcmVzX3NhbmNpb25lcyA8LSBzZXJ2aWRvcmVzICU+JSANCiAgbXV0YXRlKHRpcG9TYW5jaW9uID0gbWFwX2Nocih0aXBvU2FuY2lvbiwgfiAuW1sndmFsb3InXV0pICkNCg0KYGBgDQoNCiMgQ2FzbyBlc3BlY2lhbA0KYGBge3J9DQpzZXJ2aWRvcmVzX3NhbmNpb25lcw0KDQpgYGANCg0KDQpgYGB7cn0NCnNpc3RlbWFzMlsxLF0gJT4lIA0KICBzdHIoKQ0KYGBgDQoNCg0KDQoNCg0KDQpgYGB7cn0NCg0KYGBgDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K